home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / BOOT2.ASM < prev    next >
Assembly Source File  |  1988-12-28  |  6KB  |  413 lines

  1.     name    boot2_asm
  2.     .radix    16
  3.  
  4. n_000100:
  5.     inc    word ptr [7DF3]
  6.     mov    bx,[7DF3]
  7.     add    byte ptr [7EB2],2
  8.     call    n_FFFF9D
  9.     jmp    short n_00014B
  10.  
  11. n_000112:
  12.     mov    ax,3
  13.     test    byte ptr [7DF7],4
  14.     je    n_00011D
  15.     inc    ax
  16. n_00011D:
  17.     mul    si
  18.     shr    ax,1
  19.     sub    ah,byte ptr [7EB2]
  20.     mov    bx,ax
  21.     cmp    bx,1FF
  22.     jnb    n_000100
  23.     mov    dx,[bx+8000]
  24.     test    byte ptr [7DF7],4
  25.     jne    n_000145
  26.     mov    cl,4
  27.     test    si,1
  28.     je    n_000142
  29.     shr    dx,cl
  30. n_000142:
  31.     and    dh,0F
  32. n_000145:
  33.     test    dx,0FFFF
  34.     jz    n_000151
  35. n_00014B:
  36.     inc    si
  37.     cmp    si,di
  38.     jbe    n_000112
  39.     ret
  40.  
  41. n_000151:
  42.     mov    dx,0FFF7
  43.     test    byte ptr [7DF7],4
  44.     jnz    n_000168
  45.     and    dh,0F
  46.     mov    cl,4
  47.     test    si,1
  48.     je    n_000168
  49.     shl    dx,cl
  50. n_000168:
  51.     or    [bx+8000],dx
  52.     mov    bx,[7DF3]
  53.     call    n_FFFF98
  54.     mov    ax,si
  55.     sub    ax,2
  56.     mov    bl,byte ptr [7C0Dh]
  57.     xor    bh,bh
  58.     mul    bx
  59.     add    ax,[7DF5]
  60.     mov    si,ax
  61.     mov    bx,0
  62.     call    n_FFFF9D
  63.     mov    bx,si
  64.     inc    bx
  65.     call    n_FFFF98
  66.     mov    bx,si
  67.     mov    [7DF9],si
  68.     push    cs
  69.     pop    ax
  70.     sub    ax,20
  71.     mov    es,ax
  72.     call    n_FFFF98
  73.     push    cs
  74.     pop    ax
  75.     sub    ax,40
  76.     mov    es,ax
  77.     mov    bx,0
  78.     call    n_FFFF98
  79.     ret
  80.  
  81.     mov    ch,23
  82.     add    dh,dh
  83.     push    es
  84.     idiv    word ptr [di+2]
  85.     jne    n_0001DE
  86.     or    byte ptr [7DF7],2
  87.     mov    ax,0
  88.     mov    ds,ax
  89.     mov    ax,[20]
  90.     mov    bx,[22]
  91.     mov    [20],7EDF
  92.     mov    [22],cs
  93.     push    cs
  94.     pop    ds
  95.     mov    [7FC9],ax
  96.     mov    [7FCBh],bx
  97. n_0001DE:
  98.     ret
  99.  
  100.     push    ds
  101.     push    ax
  102.     push    bx
  103.     push    cx
  104.     push    dx
  105.     push    cs
  106.     pop    ds
  107.     mov    ah,0F        ;Get video mode
  108.     int    10
  109.     mov    bl,al
  110.     cmp    bx,[7FD4]
  111.     je    n_000227
  112.     mov    [7FD4],bx
  113.     dec    ah
  114.     mov    byte ptr [7FD6],ah
  115.     mov    ah,1
  116.     cmp    bl,7
  117.     jne    n_000205
  118.     dec    ah
  119. n_000205:
  120.     cmp    bl,4
  121.     jnb    n_00020C
  122.     dec    ah
  123. n_00020C:
  124.     mov    byte ptr [7FD3],ah
  125.     mov    word ptr [7FCF],101
  126.     mov    word ptr [7FD1],101
  127.     mov    ah,3        ;Read cursor position
  128.     int    10
  129.     push    dx
  130.     mov    dx,[7FCF]
  131.     jmp    short n_00024A
  132.  
  133. n_000227:
  134.     mov    ah,3        ;Read cursor position
  135.     int    10
  136.     push    dx
  137.     mov    ah,2        ;Set cursor position
  138.     mov    dx,[7FCF]
  139.     int    10
  140.     mov    ax,[7FCDh]
  141.     cmp    byte ptr [7FD3],1
  142.     jne    n_000241
  143.     mov    ax,8307
  144. n_000241:
  145.     mov    bl,ah
  146.     mov    cx,1
  147.     mov    ah,9        ;Write character with attribute
  148.     int    10
  149. n_00024A:
  150.     mov    cx,[7FD1]
  151.     cmp    dh,0
  152.     jne    n_000258
  153.     xor    ch,0FF
  154.     inc    ch
  155. n_000258:
  156.     cmp    dh,18
  157.     jne    n_000262
  158.     xor    ch,0FF
  159.     inc    ch
  160. n_000262:
  161.     cmp    dl,0
  162.     jne    n_00026C
  163.     xor    cl,0FF
  164.     inc    cl
  165. n_00026C:
  166.     cmp    dl,byte ptr [7FD6]
  167.     jne    n_000277
  168.     xor    cl,0FF
  169.     inc    cl
  170. n_000277:
  171.     cmp    cx,[7FD1]
  172.     jne    n_000294
  173.     mov    ax,[7FCDh]
  174.     and    al,7
  175.     cmp    al,3
  176.     jne    n_00028B
  177.     xor    ch,0FF
  178.     inc    ch
  179. n_00028B:
  180.     cmp    al,5
  181.     jne    n_000294
  182.     xor    cl,0FF
  183.     inc    cl
  184. n_000294:
  185.     add    dl,cl
  186.     add    dh,ch
  187.     mov    [7FD1],cx
  188.     mov    [7FCF],dx
  189.     mov    ah,2        ;Set cursor position
  190.     int    10
  191.     mov    ah,8        ;Read character with attribute
  192.     int    10
  193.     mov    [7FCDh],ax
  194.     mov    bl,ah
  195.     cmp    byte ptr [7FD3],1
  196.     jne    n_0002B6
  197.     mov    bl,83
  198. n_0002B6:
  199.     mov    cx,1
  200.     mov    ax,907        ;Write character '\7' with attribute
  201.     int    10
  202.     pop    dx
  203.     mov    ah,2        ;Set cursor position
  204.     int    10
  205.     pop    dx
  206.     pop    cx
  207.     pop    bx
  208.     pop    ax
  209.     pop    ds
  210.     jmp    far ptr f_000020
  211.  
  212.     add    byte ptr [bx+si],al
  213.     add    word ptr [bx+di],ax
  214.     add    word ptr [bx+di],ax
  215.     add    bh,bh
  216.     call    word ptr [bx+si-49]
  217.     mov    bh,0B7
  218.     mov    dh,40
  219.     inc    ax
  220.     mov    dh,bl
  221.     out    5A,al
  222.     lodsb
  223.     shl    ah,cl
  224.     jmp    far ptr f_0F05E6
  225.  
  226.     db    '@d\`R@@@@db^b`'
  227.  
  228.     pop    si
  229.     jo    n_000368
  230.     inc    ax
  231.     inc    cx
  232.     mov    bh,0B7
  233.     mov    bh,0B6
  234.     jmp    n_000336
  235.  
  236.     db    'IBM  3.3'
  237.     dw    200
  238.     db    2
  239.     dw    1
  240.     db    2
  241.     dw    70
  242.     dw    2D0
  243.     db    0FDh
  244.     dw    2
  245.     dw    9
  246.     dw    2
  247.     dw    0
  248.  
  249.     db    0011h dup (000h)
  250.     adc    al,byte ptr [bx][si]
  251.     add    byte ptr [bx][si],al
  252.     add    byte ptr [bx][di],al
  253.     add    dl,bh
  254.  
  255. boot2:
  256.     xor    ax,ax
  257.     mov    ss,ax
  258.     mov    sp,7C00
  259.     push    ss
  260.     pop    es
  261.     mov    bx,78
  262.     lds    si,ss:[bx]
  263.     push    ds
  264.     push    si
  265.     push    ss
  266.     push    bx
  267.     mov    di,7C2Bh
  268.     mov    cx,0Bh
  269.     cld
  270. n_000351:
  271.     lodsb
  272.     cmp    byte ptr es:[di],0
  273.     je    n_00035B
  274.     mov    al,byte ptr es:[di]
  275. n_00035B:
  276.     stosb
  277.     mov    al,ah
  278.     loop    n_000351
  279.     push    es
  280.     pop    ds
  281.     mov    [bx+2],ax
  282.     mov    [bx],7C2Bh
  283.     sti
  284.     int    13
  285.     jc    n_0003D5
  286.     mov    al,byte ptr [7C10]
  287.     cbw
  288.     mul    word ptr [7C16]
  289.     add    ax,[7C1C]
  290.     add    ax,[7C0E]
  291.     mov    [7C3F],ax
  292.     mov    [7C37],ax
  293.     mov    ax,20
  294.     mul    word ptr [7C11]
  295.     mov    bx,[7C0Bh]
  296.     add    ax,bx
  297.     dec    ax
  298.     div    bx
  299.     add    [7C37],ax
  300.     mov    bx,500
  301.     mov    ax,[7C3F]
  302.     call    n_000440
  303.     mov    ax,201
  304.     call    n_00045A
  305.     jb    n_0003C2
  306.     mov    di,bx
  307.     mov    cx,0Bh
  308.     mov    si,7DD6
  309.     rep    cmpsb
  310.     jne    n_0003C2
  311.     lea    di,[bx+20]
  312.     mov    si,7DE1
  313.     mov    cx,0Bh
  314.     rep    cmpsb
  315.     je    n_0003DA
  316. n_0003C2:
  317.     mov    si,7D77
  318. n_0003C5:
  319.     call    n_000432
  320.     xor    ah,ah
  321.     int    16
  322.     pop    si
  323.     pop    ds
  324.     pop    [si]
  325.     pop    [si+2]
  326.     int    19
  327.  
  328. n_0003D5:
  329.     mov    si,7DC0
  330.     jmp    n_0003C5
  331.  
  332. n_0003DA:
  333.     mov    ax,[51C]
  334.     xor    dx,dx
  335.     div    word ptr [7C0Bh]
  336.     inc    al
  337.     mov    [7C3C],al
  338.     mov    ax,[7C37]
  339.     mov    [7C3Dh],ax
  340.     mov    bx,700
  341. n_0003F1:
  342.     mov    ax,[7C37]
  343.     call    n_000440
  344.     mov    ax,[7C18]
  345.     sub    al,[7C3Bh]
  346.     inc    ax
  347.     cmp    [7C3C],al
  348.     jnb    n_000408
  349.     mov    al,[7C3Ch]
  350. n_000408:
  351.     push    ax
  352.     call    n_00045A
  353.     pop    ax
  354.     jb    n_0003D5
  355.     sub    [7C3C],al
  356.     je    n_000421
  357.     add    [7C37],ax
  358.     mul    word ptr [7C0Bh]
  359.     add    bx,ax
  360.     jmp    n_0003F1
  361. n_000421:
  362.     mov    ch,[7C15]
  363.     mov    dl,[7DFDh]
  364.     mov    bx,[7C3Dh]
  365.     jmp    far ptr f_000700
  366.  
  367. n_000432:
  368.     lodsb
  369.     or    al,al
  370.     je    n_000459
  371.     mov    ah,0E        ;Write character in TTY graphics mode
  372.     mov    bx,7
  373.     int    10
  374.     jmp    n_000432
  375.  
  376. n_000440:
  377.     xor    dx,dx
  378.     div    word ptr [7C18]
  379.     inc    dl
  380.     mov    [7C3Bh],dl
  381.     xor    dx,dx
  382.     div    word ptr [7C1A]
  383.     mov    [7C2A],dl
  384.     mov    [7C39],ax
  385. n_000459:
  386.     ret
  387.  
  388. n_00045A:
  389.     mov    ah,2
  390.     mov    dx,[7C39]
  391.     mov    cl,6
  392.     shl    dh,cl
  393.     or    dh,[7C3Bh]
  394.     mov    cx,dx
  395.     xchg    ch,cl
  396.     mov    dl,[7DFDh]
  397.     mov    dh,[7C2A]
  398.     int    13
  399.     ret
  400.  
  401.     db    0Dh,0A,'Non-System disk or disk error',0Dh,0A
  402.     db    'Replace and strike any key when ready',0Dh,0A,0
  403.     db    0Dh,0A,'Disk Boot failure',0Dh,0A,0
  404.     db    'IBMBIO  SYS'
  405.     db    'IBMDOS  SYS'
  406.     db    12 dup (0)
  407.     dw    0AA55
  408.  
  409.     extrn    f_000020:far,n_000336:near,n_000368:near
  410.     extrn    n_FFFF9D:near,n_FFFF98:near
  411.     extrn    f_000700:far,f_0F05E6:far,f_3FFF98:far
  412.     extrn    f_3FFF9D:far
  413.